package com.agile.leetcode.hot.easy;

/**
 * 237. 删除链表中的节点
 * 请编写一个函数，使其可以删除某个链表中给定的（非末尾）节点。传入函数的唯一参数为 要被删除的节点 。
 * <p>
 * <p>
 * <p>
 * 现有一个链表 -- head = [4,5,1,9]，它可以表示为:
 * <p>
 * <p>
 * <p>
 * <p>
 * <p>
 * 示例 1：
 * <p>
 * 输入：head = [4,5,1,9], node = 5
 * 输出：[4,1,9]
 * 解释：给定你链表中值为 5 的第二个节点，那么在调用了你的函数之后，该链表应变为 4 -> 1 -> 9.
 * 示例 2：
 * <p>
 * 输入：head = [4,5,1,9], node = 1
 * 输出：[4,5,9]
 * 解释：给定你链表中值为 1 的第三个节点，那么在调用了你的函数之后，该链表应变为 4 -> 5 -> 9.
 *
 * @Author:ChenZhangKun
 * @Date: 2021/6/8 9:51
 */
public class DeleteNode {
    public static void main(String[] args) {
        DeleteNode deleteNode = new DeleteNode();
        deleteNode.deleteNode(new ListNode(5));
    }

    public void deleteNode(ListNode node) {
        // 我们无法访问我们想要删除的节点 之前 的节点，我们始终不能修改该节点的 next 指针。
        // 相反，我们必须将想要删除的节点的值替换为它后面节点中的值，然后删除它之后的节点
        node.val = node.next.val;
        node.next = node.next.next;

    }

}

class ListNode {
    int val;
    ListNode next;

    public ListNode(int x) {
        this.val = x;
    }
}
